
package com.example.hospital.service.impl;

import com.example.hospital.exception.UserServiceException;
import com.example.hospital.mapper.UserMapper;
import com.example.hospital.pojo.SystemLog;
import com.example.hospital.pojo.User;
import com.example.hospital.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.List;

@Service
public class UserServiceImpl implements UserService  {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private SystemLogServiceImpl systemLogService;

    // 注册用户
    @Override
    public void registerUser(User user) {

        // 直接存储明文密码
        userMapper.insertUser(user);
        // 记录日志（可选）
        logUserAction(user.getId(), "注册新用户: " + user.getUsername());
    }

    //日志记录方法
    private void logUserAction(Integer userId, String action) {

        SystemLog log = new SystemLog();
        log.setUserId(userId);
        log.setAction(action);
        //增加web程序，可使用HttpServletRequest对象的doGet方法获取用户的IP地址
        log.setIpAddress("127.0.0.1"); // 示例IP地址

        systemLogService.logAction(log);
    }

    // 登录验证
    @Override
    public User login(String username, String rawPassword) {
        User user = userMapper.findByUsername(username);
        if (user != null && user.getPassword().equals(rawPassword)) {
            // 记录登录日志（可选）
            logUserAction(user.getId(), "用户登录");
            return user;
        }
        return null;
    }

    // 获取所有用户
    @Override
    public List<User> getAllUsers() {
        return userMapper.findAll();
    }

    // 根据ID获取用户
    @Override
    public User getUserById(Integer id) {
        return userMapper.findById(id);
    }

    @Override
    public User getUserByName(String name) {
        return userMapper.findByUsername(name);
    }

    // 更新用户信息
    @Override
    public void updateUser(User user) {
        // 获取现有用户信息
        User existingUser = userMapper.findById(user.getId());
        if (existingUser == null) {
            throw new UserServiceException("user not found！");
        }

        // 如果密码字段为空，保持原密码
        if (user.getPassword() == null || user.getPassword().isEmpty()) {
            user.setPassword(existingUser.getPassword());
        } else {
            // 如果用户提供了新的密码，直接更新为新密码
            // 明文密码，此处无需加密
        }
        userMapper.updateUser(user);
        // 记录日志（可选）
        logUserAction(user.getId(), "更新用户信息");
    }

    // 删除用户
    @Override
    public void deleteUser(Integer id) {
        // 记录日志
        logUserAction(id, "删除用户");
        userMapper.deleteUser(id);
    }

    // 根据角色获取用户
    @Override
    public List<User> getUsersByRole(String role) {
        return userMapper.findByRole(role);
    }


}
